-
Notifications
You must be signed in to change notification settings - Fork 5
[BE] (feat) pr close이슈로 인한 재설정 #13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
초기 생성을 위한 커밋입니다.
user의 정보를 담을 클래스 생성
user 회원가입, 유저와 유저의 장바구니를 담은 Map을 반환하는 메소드, 가입된 유저를 전부 출력하는 메소드를 구현하였습니다.
장바구니에 담을 아이템의 정보를 담은 클래스를 생성하였습니다.
상품추가, 상품목록 출력(개인), 상품목록 출력(전체) 메소드를 구현하였습니다.
회원가입, 상품주문, 상품목록 조회 등을 실행하는 메소드를 구현하였습니다. Switch문으로 동작합니다.
2 WEEK 기반 프로젝트 시작하기 위해 1WEEK 정답 fork하여 커밋
DiscountPolicy 인터페이스 구현하여 정률로 할인하는 기능 구현, 이 때 금액을 %로 할인하였을때 금액의 실수화를 막기 위해 int로 강제 형변환
ANSWER.md 파일 내 이론요약, solid 원칙에 관한 공부한 것 기반으로 요약한 내용 작성
1WEEK 해답 가져와서 사용하는 도중 버전 충돌로 실행되지 않던 오류 해결
discountRate를 실수 0.1 대신 정수 10으로 수정하여 조금 더 해석하기에 용이하게끔 수정하였습니다.
int로 형변환 하는 과정에서 항상 0으로 인식되던 현상 수정
RateDiscountPolicy 구현한 것으로 객체 생성하여 정률할인 구현
기존 가격 10000은 정률10%와 고정 1000원이 동일하므로 정확한 테스트가 불가능하여 100000으로 수정
가격 계산기능, 계산된기능 출력 기능은Order 클래스의 책임을 하나 이상 지게 하는것으로 판단, 또한 DiscountPolicy 인터페이스가 해당 기능 대체 가능하므로 삭제하였다.
dependency 지정하여 Lombok 사용할 수 있게함.
spring IOC, DI, spring container 에 관해 공부한 내용 기록
등급이 VIP가 아닐때 할인가격 0 이아닌 원래 가격 price가 리턴되는 문제 수정, 스프링 어노테이션 사용을 위한 @component 활용
스프링 어노테이션 활용하기 위한 @component 추가
스프링 어노테이션 사용하여 객체 의존 주입, 할인정책은 두개의 빈등록이 존재하여 @qualifier 사용하여 구별 -> orderApp 실행 결과 createOrder() 메소드에서 첫번째 줄에서 memberRepository.findById(memberID)가 nullPointException 발생, 객체 의존 주입이 제대로 되지 않았다는 원인 예상 후 해결하기 위해 온갖 노력해봤지만 실패
스프링 스타터 사용하여 초기 프로젝트 생성
artifact, project metadata group 이름 설정오류로 삭제 후 다시 초기설정함.
item 객체 정보를 담기위한 VO 구현
mvc 패턴 사용하기 위한 컨트롤러 임시 구현 후 매핑 연결 확인
상품목록 상품명,가격,수량 등을 표시하는 뷰 생성
상품 등록을 하기 위한 상품명,가격,수량 등을 입력받아 상품을 등록하는 뷰 생성
상품 클릭 시 해당 상품 상세 정보를 출력하는 뷰 생성
상품 id, 상품명, 가격, 수량 등을 수정하여 재등록 할 수 있게 해주는 뷰 생성
초기 설정된 Controller 기능별 세분화하여 매핑, 컨트롤러 또한 @RequestMapping사용하여 매핑, 현재 저장되있는 아이템 전부 리스트에 넣어 반환하는 기능 itemList구현, 테스트용 초기 데이터 설정을 위한 @PostConstruct 사용
상품 저장,검색 등 기능을 구현한 itemRepository 구현
itemRepository 에서 데이터를 받아와 출력하기 위한 thymeleaf 사용하여 리팩터링, th:each 사용하여 itemRepository 내에 있는 데이터만큼 반복하여 출력
8,9강 강의 수강한 내용 기반으로 요약하여 7 WEEK MISSION.md 파일 수정
저번 8주차 미션(study 요약) 기간 내에 완료하지 못하여 늦게나마 완료함.
9주차 스터디 요약 내용 추가하여 문서 수정하였습니다.
|
좋습니다. |
스프링 스타터 사용하여 생성한 초기 프로젝트 구현입니다.
각 url 매핑에 대한 요청을 service를 사용하여 해결 후 응답.
student 객체의 crud 기능을 구현한 StudentRepository 구현
student의 각 요소를 받아 객체를 생성할 수 있게끔 StudentVO 구현
컨트롤러의 책임이 과해지지 않도록 service 기능을 분리하여 따로 구현, 컨트롤러에서 이를 불러와 사용하게끔 함.
shinywoon
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
전반적으로 실력이 좋아진것 같습니다.
다만 logic 을 구성할때 좀 더 고려해야 할 점들을 놓친 부분들이 보입니다.
join 하는 유저가 이미 존재하는 경우, update , delete 후 적용여부 알림 등 입니다.
| studentService.updateStudent(studentCode,student); | ||
| return "redirect:/student/students/{studentCode}"; | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
커밋 단위가 너무 큽니다.
모든 작업을 다 완료 후 update 하게 된다면
나중에 버그등의 문제 발생 시 Version 관리가 어렵습니다.
| public void update(Long studentCode, Student updateParam) { | ||
| Student findStudent = findById(studentCode); | ||
| findStudent.setName(updateParam.getName()); | ||
| findStudent.setDept(updateParam.getDept()); | ||
| findStudent.setGrade(updateParam.getGrade()); | ||
| findStudent.setStudentCode(updateParam.getStudentCode()); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
첨언하자면 Clean 코드의 메서드 작성 방법에 메서드는 최대한 작게 라는 법칙이 있습니다.
현재 TO 문장으로 써보자면 다음과 같습니다.
TO DB에서 회원을 찾아
update 정보를 갱신하고
DB에 적용한다.
이는 추상화 레벨로 따져보면 쉽게 구분할 수 있는데...
DB 정보를 업데이트 한다. : 추상화 레벨 1
DB 에서 회원 정보를 찾는다 [ 이미 별도 메서드로 구분 되어 있음 ] 추상화 레벨 2
Entity 정보를 수정한다. : 추상화 레벨 2
DB 에 새로운 정보를 저장한다. : [ 이미 별도 메서드로 구분 되어 있음 ] 추상화 레벨 2
( 추상화 레벨은 더 구체적인 순으로 선정했다. )
3.에 해당하는 Entity 정보를 수정한다. 가 다른 동작과 추상화 동작이 같다면 별도의 메서드로 구분해 재활용성을 높히고 가독성을 높히는게 더 좋은 코드라고 볼 수 있을 것 같습니다.
미흡한 점 개선 전 디폴트 상태 저장 용도 커밋입니다.
pr close되어서 재오픈 하였습니다.